/*
# 用语定义
- 空白内容：空格、回车、已 @ 成员、文本框起始/终止处
- 连贯文字：中间不包含”空格内容“的一段字符

# 开启/关闭列表
- 每次文本框事件后，如果光标左侧的连贯文字以 @ 开头，且光标右侧是空白，则把 @ 后的内容作为搜索词，显示成员列表
- 按 ESC 或点击列表外部会关闭列表，但后续触发开启条件时会再次开启

# 列表位置
- 为便于实现，固定显示在 @ 符号正上方

# 列表数据
- 排除聊天者自己
- “@所有人”和“群主”固定排最前面（不过他们也会被搜索过滤）
- 个别成员没有 name，用 userId 作为 name（这个代替的 name 也用于搜索）

# 提交方式
- 鼠标点击成员
- 按回车提交高亮成员

# 列表交互/高亮成员
- 列表初始加载及每次变化时，滚动条重置到顶部，并高亮当前第一个成员
- 鼠标经过成员会将其高亮
- 键盘按上下键可改变高亮成员
- 高亮成员时会自动调整滚动条确保其处于可视范围内

# 提交 @ 内容
- 为此次提交生成一个 id（用于后续删除），记录在已 @ 列表里
- 把最新的被 @ 成员去重提交给上级
- 移除文本框中的 @ 符号和搜索词，插入 @xxx 特殊元素

# 移除 @ 内容
每当文本框内容更新时，若已 @ 列表里某条记录找不到对应的 @xxx 特殊元素了，将此条记录移除，并提交给上级。
*/
export * from './view'
export * from './members'
export * from './at-list'
export * from './highlight'
